import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Demo1 {
    public static void main(String[] args) {
        //工厂类,里面有标准库提供的创建线程池的工厂方法

        //创建一个最普通的线程池
        //能够根据任务的数目,自动进行线程的扩容
        ExecutorService service =Executors.newCachedThreadPool();

        for (int i = 0; i < 10000; i++) {
            //i是变量无法直接获取,在循环内,提交任务前创建一个新变量,就可以捕获
            //因为一个变量可能会被一个线程在使用的时候销毁,这样线程池里的其他线程就无法捕获变量了,就会造成空指针异常
            int id = i;
            service.submit(new Runnable() {
                @Override
                public void run() {
                    //提交任务给线程池
                    System.out.println("hello "+id+" "+Thread.currentThread().getName());//获取了当前线程的名称
                }
            });
        }
        /*//创建一个固定线程数的线程池
        Executors.newFixedThreadPool(4);

        //创建一个只包含单个线程的线程池
        Executors.newSingleThreadExecutor();

        //创建一个固定线程个数,但是任务延时执行的线程池
        Executors.newScheduledThreadPool(4);
*/
    }
}
